<?php 
/**
 * @Name AuthRule 
 * @Title 节点控制器 
 * @Extends app\admin\controller\AdminCore 
 * @Modifiers public
 * @Auth Ghj<912524639@qq.com> 
 * @Time 2018年08月17日 
 * @Site http:// www.thinkgms.com/ 
 */
namespace app\admin\controller;
use app\admin\controller\AdminCore;

class AuthRule extends AdminCore{

	//当前控制器的模型
	protected $Model;
	
	//当前控制器的数据表
	protected $Db;
	
	//当前控制器的验证器
	protected $Validate;
	
	//当前控制器的主键
	protected $Pk='id';
	
	//当前控制器的父键
	protected $PPk='p_id';
    
	//新增预设数据
	protected $DataPre = [
		'id'=>'',
		'name'=>'',
		'title'=>'',
		'p_id'=>'0',
		'type'=>'',
		'identifying'=>'2546be1e14dcf3147db5c3e65ed44927',
		'icon'=>'tf tf-other',
		'extend'=>'',
		'condition'=>'',
		'hide'=>'0',
		'sort'=>'1',
		'status'=>'1',
	];
	
	/**
	 * @Name initialize
	 * @Title 初始化方法
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月17日 
	 * @Site http:// www.thinkgms.com/
	 */
    public function initialize()
    {
        // 继承父模型的初始化方
		parent::initialize ();
		$this->Validate	= validate ('app\admin\validate\AuthRule');
		$this->Model	= model('app\admin\model\AuthRule');
		$this->Db		= db('AuthRule');
    }

	/**
	 * @Name index
	 * @Title 首页
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月17日 
	 */
	public function index() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取请求数据
			$Parm = input ( 'post.' );
			// 初始化条件
			$Map = [];
			// 调用_ExtSort函数获取 排序条件
			$Sort = _ExtSort ( $Parm ['sort'] );
			//获取数据
			$List = $this->Model->where ( $Map )->order ( $Sort )->select ();
			foreach($List as $K => $V){
				$List[$K]['iconCls'] = $V['icon'];
				unset($List[$K]['icon']);
			}
			// 对规则进行 有键值的树状化
			$Return = ['children'=>_Ext_ListToTree ( $List, $this->Pk, $this->PPk, 'children', 0 ,2),'expand'=>true];
			// 返回json数据
			return json ( $Return );
		} else {
			// 返回视图
			return view ();
		}
	}
    
	/**
	 * @Name add
	 * @Title 新增
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月17日 
	 */
	public function add() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取POST数据
			$Parm = input ( 'post.' );
			// 验证数据 场景为add
			if ($this->Validate->scene ( 'add' )->check ( $Parm )) {
				// 数据写入 验证字段为数据库内字段 写入类型为新增
				$Result = $this->Model->allowField ( true )->isUpdate ( false )->save ( $Parm );
				// 判断执行结果
				if ($Result) {
					// 返回成功
					return _Code ( '200', '成功' );
				} else {
					// 返回失败
					$_Err = $this->Model->getError ();
					return _Code ( '201', $_Err ? $_Err : '失败' );
				}
			} else {
				// 验证失败 获取验证器的错误信息
				$_Err = $this->Validate->getError ();
				// 返回错误信息 如果没有错误信息 默认返回
				return _Code ( '301', $_Err ? $_Err : '数据验证失败' );
			}
		} else {
			// 获取请求ID
			$this->DataPre['p_id'] = input ( 'p_id', 'abc20d7bde1df257f890e152af2e3470' );
			return _Code ( '200', '成功', $this->DataPre );
		}
	}
	
	/**
	 * @Name edit
	 * @Title 更新
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月17日 
	 */
	public function edit() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取POST数据
			$Parm = input ( 'post.' );
			if(!array_key_exists($this->Pk,$Parm)){
				// 参数异常 返回错误信息
				return _Code ( '101', '参数异常 主键不存在' );
			}
			// 验证数据 场景为edit
			if ($this->Validate->scene ( 'edit' )->check ( $Parm )) {
				// 数据写入 验证字段为数据库内字段 写入类型为更新
				$Result = $this->Model->allowField ( true )->isUpdate ( true )->save ( $Parm, [ $this->Pk => $Parm[$this->Pk] ]);
				// 判断执行结果
				if ($Result) {
					// 返回成功
					return _Code ( '200', '成功' );
				} else {
					// 返回失败
					$_Err = $this->Model->getError ();
					return _Code ( '201', $_Err ? $_Err : '失败' );
				}
			} else {
				// 验证失败 获取验证器的错误信息
				$_Err = $this->Validate->getError ();
				// 返回错误信息 如果没有错误信息 默认返回
				return _Code ( '301', $_Err ? $_Err : '数据验证失败' );
			}
		} else {
			// 获取请求ID
			$ParmID = input ( $this->Pk, '' );
			// 验证参数
			if ($ParmID == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数异常 主键不存在' );
			}
			// 读取数据
			$Result = $this->Model->where ( [ $this->Pk => $ParmID ] )->find ();
			// 判断数据是否正确
			if (! $Result) {
				// 返回错误信息
				return _Code ( '201', '数据不存在' );
			}
			// 返回json数据
			return _Code ( '200', '成功', $Result );
		}
	}
	
	/**
	 * @Name del
	 * @Title 删除
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月17日 
	 */
	public function del() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取请求ID
			$ParmID = input ( $this->Pk, '' );
			// 验证参数
			if ($ParmID == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数异常 主键不存在' );
			}
			// 拆分字符串 因为前台可能会删除多条数据
			$ParmID = explode ( ',', $ParmID );
			// 删除数据
			$Result = $this->Model->destroy ( $ParmID );
			// 判断执行结果
			if ($Result) {
				// 返回成功
				return _Code ( '200', '成功' );
			} else {
				// 返回失败
				$_Err = $this->Model->getError ();
				return _Code ( '201', $_Err ? $_Err : '失败' );
			}
		}
	}

}